package cc.z8g.browser.core.config;

import android.app.Activity;

import cc.z8g.browser.DefaultBrowserActivity;
import cc.z8g.browser.utils.MiscUtils;
import cc.z8g.browser.utils.sp.UserSp;
import cc.z8g.browser.utils.ThreadPool;
import cc.z8g.browser.utils.WebUtils;

/**
 * A command that runs as the browser instance is shutting down to clean up anything that needs to be cleaned up. For instance, if the user has chosen to clear cache on exit or if incognito mode is closing.
 */
public class ExitCleanup {
    public static void cleanUp(Activity activity) {
        if (activity instanceof DefaultBrowserActivity) {
            doNormalExitCleanup(activity);
        } else if (MiscUtils.FULL_INCOGNITO) {
            doEnhancedIncognitoExitCleanup(activity);
        } else {
            doBasicIncognitoExitCleanup();
        }
    }

    /**  API >= 28 时，当隐身进程退出时应运行的退出清理。此清理将清除 cookie 和所有 web 数据，可以在不影响的情况下完成。 */
    private static void doEnhancedIncognitoExitCleanup(Activity activity) {
        WebUtils.clearCache(activity);
        WebUtils.clearCookies();
        WebUtils.clearWebStorage();
    }


    /** API 小于 28 时，在隐身模式实例关闭时应运行的退出清理。这比 API 大于 28 时要不安全得多，因为我们可以分离 WebView 数据。 */
    private static void doBasicIncognitoExitCleanup() {
        WebUtils.clearWebStorage(); // 确保隐身模式尽可能安全，同时不会破坏现有的浏览器实例。
    }

    /** 在主浏览器进程退出时应运行的退出清理。*/
     private static void doNormalExitCleanup(Activity activity) {
         if (UserSp.getBoolean(UserSp.KEY_EXIT_CLEAR_CACHE)) {
             WebUtils.clearCache(activity);
         }
         if (UserSp.getBoolean(UserSp.KEY_EXIT_CLEAR_HISTORY)) {
             WebUtils.clearHistory(activity, ThreadPool.getDBScheduler());
         }
         if (UserSp.getBoolean(UserSp.KEY_EXIT_CLEAR_COOKIES)) {
             WebUtils.clearCookies();
         }
         if (UserSp.getBoolean(UserSp.KEY_EXIT_CLEAR_WEB_STORAGE)) {
             WebUtils.clearWebStorage();
         }
    }
}
